package com.cjc.sport.mapper;

import com.cjc.sport.entity.Category;
import com.cjc.sport.entity.Course;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 课程表mapper
 */
public interface CourseMapper {
    /**
     * 添加课程
     *
     * @param record 课程对象
     * @return 0 失败 1 成功
     */
    int insert(Course record);

    /**
     * 依据id查询课程
     *
     * @param courseId 课程id
     * @return 相关课程
     */
    Course selectByPrimaryKey(String courseId);


    /**
     * 更新课程
     *
     * @param record 课程对象
     * @return 0 失败 1 成功
     */
    int updateByPrimaryKeyWithBLOBs(Course record);

    /**
     * 更新课程
     *
     * @param record 课程对象
     * @return 0 失败 1 成功
     */
    int updateByPrimaryKey(Course record);

    /**
     * dyp 动态查询
     *
     * @param courseName   课程名称
     * @param categoryName 课程分类名称
     * @param courseTag    课程标签
     * @return 课程集合
     */
    List<Course> selectActionSql(@Param("courseName") String courseName,
                                 @Param("categoryName") String categoryName,
                                 @Param("courseTag") String courseTag);

    /**
     * dyp 依据课程分类id查询课程表
     *
     * @param category 课程对象
     * @return 课程集合
     */
    Page<Course> selectByCategoryId(Category category);

    /**
     * dyp 依据课程分类id修改课程
     *
     * @param course 课程对象
     * @return 0 失败 1 成功
     */
    int updateByCategoryId(Course course);


    /**
     * 根据 课程类别 查询所有记录
     *
     * @param categoryName 课程分类名称
     * @return 课程集合
     */
    List<Course> selectAllCoursesByCategoryName(@Param("categoryName") String categoryName);

    /**
     * 根据 课程类别 和 课程序号 查询课程记录
     *
     * @param categoryName 课程分类名称
     * @param courseNum    课程序号
     * @return 课程集合
     */
    Course selectCourse(@Param("categoryName") String categoryName, @Param("courseNum") int courseNum);

    /**
     * 新增一条课程记录
     *
     * @param record 课程对象
     * @return 0 失败 1 成功
     */
    int insertSelective(Course record);

    /**
     * 编辑课程
     *
     * @param record 课程对象
     * @return 0 失败 1 成功
     */
    int updateByPrimaryKeySelective(Course record);

    /**
     * 删除课程
     *
     * @param courseId 课程id
     * @return 0 失败 1 成功
     */
    int deleteByPrimaryKey(String courseId);

    /**
     * 根据课程分类、课程名称和课程标签查询课程
     *
     * @param categoryName 课程分类名称
     * @param courseName   课程名称
     * @param courseTag    课程标签
     * @return 0 失败 1 成功
     */
    Page<Course> selectCoursesByCCT(@Param("categoryName") String categoryName,
                                    @Param("courseName") String courseName,
                                    @Param("courseTag") String courseTag);

    /**
     * 更新课程排序
     *
     * @param list 排序集合
     * @return 0 失败 1 成功
     */
    int updateBatchOfCourseNums(@Param("list") List<Course> list);

    /**
     * 获取所有课程
     * @return 课程集合
     */
    List<Course>selectAllCourse();
}